(function($){
    $.fn.extend({
        diyUpload:function(opt, serverCallBack){
 			if(typeof opt != "object"){
 				promptBox('参数错误!');
				return;	
			}
			var $fileInput = $(this);
			var $fileInputId = $fileInput.attr('id');
			if(opt.url){
				opt.server = opt.url; 
				delete opt.url;
			}
			if(opt.success){
				var successCallBack = opt.success;
				delete opt.success;
			}
			if(opt.error){
				var errorCallBack = opt.error;
				delete opt.error;
			}
			//迭代出默认配置
			$.each(getOption('#'+$fileInputId),function(key, value){
					opt[ key ] = opt[ key ] || value; 
			});
			if(opt.buttonText){
				opt['pick']['label'] = opt.buttonText;
				delete opt.buttonText;	
			}
			var webUploader = getUploader(opt);
			if(!WebUploader.Uploader.support()){
				promptBox('上传组件不支持您的浏览器！');
				return false;
       		}
			//绑定文件加入队列事件;
			webUploader.on('fileQueued', function(file){
				webUploader.upload();
			});
			//全部上传结束后触发;
			webUploader.on('uploadFinished', function(){
//				$fileInput.next('.parentFileBox').children('.diyButton').remove();
			});
			//绑定发送至服务端返回后触发事件;
			webUploader.on('uploadAccept', function(object ,data){
				if(serverCallBack) serverCallBack(data);
			});
			//上传成功后触发事件;
			webUploader.on('uploadSuccess',function(file, response){
				var $fileBox = $('#fileBox_'+file.id);
				if (successCallBack){
					successCallBack(response, $fileBox);
				}
			});
			//上传失败后触发事件;
			webUploader.on('uploadError',function(file, reason){
				if (errorCallBack){
					errorCallBack(err);
				}
			});
			//选择文件错误触发事件;
			webUploader.on('error', function(code){
				var text = '';
				switch( code ) {
					case  'F_DUPLICATE' : text = '该文件已经被选择了!' ;
					break;
					case  'Q_EXCEED_NUM_LIMIT' : text = '最多只能上传1张图片!' ;
					break;
					case  'F_EXCEED_SIZE' : text = '文件大小超过限制!';
					break;
					case  'Q_EXCEED_SIZE_LIMIT' : text = '所有文件总大小超过限制!';
					break;
					case 'Q_TYPE_DENIED' : text = '文件类型不正确或者是空文件!';
					break;
					default : text = '未知错误!';
 					break;	
				}
				promptBox(text);
        	});
        }
    });
	//Web Uploader默认配置;
	function getOption(objId){
		return{
			//按钮容器;
			pick:{
				id:objId,
				label:"",
				multiple:false
			},
			//类型限制;
			accept:{
				title:"Images",
				extensions:"gif,jpg,jpeg,bmp,png",
				mimeTypes:"image/*"
			},
			//配置生成缩略图的选项
			thumb:{
				width:75,
				height:75,
				quality:70, // 图片质量，只有type为`image/jpeg`的时候才有效
				allowMagnify:false, // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false
				crop:true, // 是否允许裁剪。
				type:"image/jpeg" // 为空的话则保留原有图片格式,否则强制转换成指定的类型
			},
			method:"POST", //文件上传方式
			server:"", //服务器地址
			sendAsBinary:false, //是否已二进制的流的方式发送文件，这样整个上传内容php://input都为文件内容
			chunked:false, // 开起分片上传。 thinkphp的上传类测试分片无效,图片丢失;
			//chunkSize:1024 * 2048, // 分片大小
			fileNumLimit:100, //最大上传的文件数量
			fileSizeLimit:1024 * 1024 * 5, //总文件大小
			fileSingleSizeLimit:1024 * 1024 * 5 //单个文件大小(单位字节);
		};
	}
	//实例化Web Uploader
	function getUploader(opt){
		return new WebUploader.Uploader(opt);;
	}
})(jQuery);